Skip to content

Add 3MF file format support (#60)#81

Open
trek-e wants to merge 3 commits intorubenwe:masterfrom
trek-e:feature/3mf-import
Open

Add 3MF file format support (#60)#81
trek-e wants to merge 3 commits intorubenwe:masterfrom
trek-e:feature/3mf-import

Conversation

@trek-e
Copy link
Copy Markdown

@trek-e trek-e commented Jan 24, 2026

Summary

  • Adds support for importing 3D Manufacturing Format (.3mf) files
  • 3MF is a modern ZIP-based format widely used by 3D printing software (PrusaSlicer, Cura, etc.)

Note: This PR depends on #80 (OBJ import) for the shared MeshImporter infrastructure.

Changes

  • New file: Assets/Scripts/Util/Mesh/ThreeMfParser.cs - Parses 3MF format
  • Modified: MeshImporter.cs - Added .3mf extension handling
  • Modified: Constants.cs - Added *.3mf to supported patterns

3MF Parser Features

  • Reads ZIP-based 3MF archives
  • Parses XML model data from 3D/3dmodel.model
  • Extracts vertices and triangles from all mesh objects
  • Handles both namespaced and non-namespaced XML variants
  • Coordinate system conversion (right-handed → Unity left-handed)

Design Decision

Single 3MF file = single combined model

The issue notes that 3MF can contain multiple models with transformations. For this initial implementation, I chose the simplest approach:

  • All meshes in a 3MF are combined into a single model
  • This matches existing behavior (one file = one library entry)

Future enhancements could add:

Test plan

  • Import folder containing 3MF files
  • Verify 3MF models display correctly
  • Test multi-mesh 3MF files (combined correctly)
  • Verify 3MF models can be rotated and tagged
  • Test mixed folders (STL + OBJ + 3MF)

🤖 Generated with Claude Code

trek-e and others added 3 commits January 23, 2026 18:39
- STACK.md - Technologies and dependencies
- ARCHITECTURE.md - System design and patterns
- STRUCTURE.md - Directory layout
- CONVENTIONS.md - Code style and patterns
- TESTING.md - Test structure
- INTEGRATIONS.md - External services
- CONCERNS.md - Technical debt and issues
- Add ObjParser for parsing Wavefront OBJ files
- Create unified MeshImporter that handles STL and OBJ formats
- Update Constants to support multiple file patterns (*.stl, *.obj)
- Update IFileSystem/FolderFileSystem to support multiple patterns
- Update Library and ViewPort to use new MeshImporter

OBJ parser supports:
- Vertex positions (v)
- Vertex normals (vn)
- Face definitions with various formats (f v, f v/vt, f v/vt/vn, f v//vn)
- Polygon triangulation (fan triangulation for n-gons)
- Coordinate system conversion (right-handed to Unity's left-handed)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Add ThreeMfParser for parsing 3D Manufacturing Format files
- Update MeshImporter to handle .3mf extension
- Add *.3mf to SupportedFilePatterns

3MF parser features:
- Reads ZIP-based 3MF archives
- Parses XML model data from 3D/3dmodel.model
- Extracts vertices and triangles from all mesh objects
- Combines multiple meshes into single model (simplest approach)
- Handles namespaced and non-namespaced XML variants
- Converts coordinate system (right-handed to Unity left-handed)

Design decision: Single 3MF file = single combined model
This matches the existing behavior where one file = one library entry.

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant